home *** CD-ROM | disk | FTP | other *** search
- ;☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
- ;
- ; 高速テキスト転送用コマンドプログラム V1.0c
- ;
- ; (パソコン通信に於ける高速テキスト転送等の用途用)
- ;
- ;
- ;
- ;
- ; 使用アセンブラ:Lucid ASSEMBLER&DEBUGGER
- ;
- ; 動作モード:8086以降-16ビット・リアルモード
- ;
- ; 作 成 者: Ken Inoue(HFH02366)
- ;
- ; 作成 日時: 1991年10月22日(火) 所要時間:約4日(含デバッグ)
- ;
- ;○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
- ;使用方法
- ;
- ;> SEND filename [ /L ]
- ; オプションに"/L"を与えると、改行コードCR+LFにて送信。(デフォルトはCRのみ)
- ;☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
-
-
- .use16
- .stack 256
-
- ;======== CONSTANTS ========
-
- cmdline equ 80h
- BUFFER_SIZE equ 1024*60 ;60KB
-
- ;==============================================================================
- ;======== MAIN PROGRAM PROCEDURE ==============================================
- ;==============================================================================
- ORG 100h
-
- SEND_TXT proc near
- ;***** comment
- mov d_sp,sp
- mov sp,offset stack+(256-2)
- pusha
- mov ah,9
- mov dx,offset str_o
- int 21h
- mov ah,9
- mov dx,offset str_o2
- int 21h
- mov ah,9
- mov dx,offset str_o3
- int 21h
-
- mov si,cmdline+2
- mov di,offset file_name
- xor cx,cx
- mov cl,cmdline
- #cm_rd: lodsb
- cmp al,0
- je short #cm_rd_end
- cmp al,0dh
- je short #cm_rd_end
- cmp al," "
- je short #cm_rd_end
- stosb
- loop #cm_rd
- #cm_rd_end: mov al,0
- stosb
-
- mov bp,cmdline
- xor ax,ax
- mov al,[bp]
- sub si,80h
- dec si
- cmp ax,si
- jle short #no_option
- mov option_para,1
-
- #no_option: cmp byte ptr [bp+1],20h
- jge short #opnfl
- jmp #quit__
-
- ;***** open file
- #opnfl: mov dx,offset file_name
- mov ax,3d00h
- int 21h
- jnc short #nxt0
- jmp #quit_
- #nxt0: mov file_handle,ax
- mov ah,9
- mov dx,offset str_file_check
- int 21h
- call get_filesize
- call COMMENT_SET
-
-
- ;***** Setting Terminal Mode
- mov ax,0200h
- int 9bh
- cmp ah,4
- jne short #nxt1
- jmp #quit_
- #nxt1: mov ax,0400h
- mov di,offset terminal_para
- int 9bh
- or byte ptr terminal_para,00010001b; x-flow control on
- mov word ptr terminal_para+6,50 ; 500[ms] <=time out
- mov ax,0300h
- mov di,offset terminal_para
- int 9bh
- mov ax,0100h
- int 9bh
-
- ;***** ROUTINE OF SENDING TEXT DATA - MAIN ROUTINE *****
- ;***** comment
- cmp option_para,0
- jne short #msg2
- #msg1: mov ah,9
- mov dx,offset str_s1
- int 21h
- jmp short #msgx
- #msg2: mov ah,9
- mov dx,offset str_s2
- int 21h
- #msgx: mov ah,9
- mov dx,offset str_x1
- int 21h
-
- mov bp,option_para ;for speed up & work
-
- ;***** load file
- mov flag,0 ; flag of EOF.
- even
- #load: mov ah,3fh
- mov bx,file_handle
- mov cx,BUFFER_SIZE
- mov dx,offset data_buffer
- int 21h
- mov cx,ax
- cmp cx,BUFFER_SIZE
- je short #load_path
- mov flag,1
- even
- #load_path: mov si,offset data_buffer ;pointer
- ;***** send data to RS-232C port 0---------------------------------------------
- even
- #loop_sd: call MESSAGE
- mov dl,[si]
- inc si
- and bp,bp
- jnz short #re
- cmp dl,0ah ;LF code
- jne short #re ; cutting.
- dec cx
- jz short #ok_
- jmp short #loop_sd
- #re: mov ax,0700h
- int 9bh ;send
- cmp ah,4 ; guard for hung-up
- je short #quit2 ;
- and ah,ah
- jz short #ok
- call XFLOW_ON
- #ok: loop #loop_sd
- #ok_: cmp flag,0 ;Flag of buffer is full or no-full.
- je short #load
-
- #finish: mov ah,9
- mov dx,offset str_f
- int 21h
- ;***** beep
- mov ah,0
- int 9eh
- mov al,10
- #wai: mov cx,0ffffh
- #wait: loop #wait
- dec al
- jne short #wai
- mov ah,1
- int 9eh
-
- #quit: mov bx,file_handle
- mov ah,3eh
- int 21h
- popa
- mov sp,d_sp
- mov ax,4c00h
- int 21h
- #quit2: mov bx,file_handle
- mov ah,3eh
- int 21h
- mov ah,9
- mov dx,offset str_q
- int 21h
- popa
- mov sp,d_sp
- mov ax,4c00h
- int 21h
- #quit_: mov ah,9
- mov dx,offset str_q
- int 21h
- popa
- mov sp,d_sp
- mov ax,4c00h
- int 21h
- #quit__: mov ah,9
- mov dx,offset str_inf
- int 21h
- popa
- mov sp,d_sp
- mov ax,4c00h
- int 21h
- SEND_TXT endp
-
- ;***** X-FLOW display routine.
- even
- XFLOW_ON proc near
- push dx
- mov ah,9
- mov dx,offset str_x0
- int 21h
- pop dx
- even
- #re2: push dx
- mov ax,0900h
- int 9bh
- pop dx
- test bh,101b
- jz short #re2
- test bl,10b
- jz short #re2
- mov ax,0700h ;send data (dl=data)
- int 9bh
- mov ah,9
- mov dx,offset str_x1
- int 21h
- ret
- XFLOW_ON endp
-
- ;***** GET FILE SIZE
-
- get_filesize proc near
- #repeat: mov ah,3fh
- mov bx,file_handle
- mov cx,1024
- mov dx,offset data_buffer
- int 21h
- cmp ax,1024
- jl short #return
- inc file_size
- jmp short #repeat
- #return: mov ax,4200h ;file pointer offset
- mov bx,file_handle
- xor cx,cx
- xor dx,dx
- int 21h
- ret
- get_filesize endp
-
- ;***** MESSAGE DISPLAY routine
- even
- MESSAGE proc near
- inc data_size1
- cmp data_size1,1024
- je short #display
- ret
- even
- #display: mov word ptr data_size1,0
- inc data_size2
- xor dx,dx
- mov ax,data_size2
- and ax,ax
- jz short #qut
- div div10
- add dl,"0"
- mov str_x1+29,dl
- xor dx,dx ;
- and ax,ax ;
- jz short #qut ;
- div div10 ;
- add dl,"0" ;
- mov str_x1+28,dl ;
- xor dx,dx
- and ax,ax
- jz short #qut
- div div10
- add dl,"0"
- mov str_x1+27,dl
- xor dx,dx ;
- and ax,ax ;
- jz short #qut ;
- div div10 ;
- add dl,"0" ;
- mov str_x1+26,dl ;
- #qut: mov ah,9
- mov dx,offset str_x1
- int 21h
- ret
- MESSAGE endp
-
- ;***** COMMENT SET
- even
- COMMENT_SET proc near
- xor dx,dx
- mov ax,file_size
- and ax,ax
- jz short #qui
- div div10
- add dl,"0"
- mov str_x1+34,dl
- xor dx,dx ;
- and ax,ax ;
- jz short #qui ;
- div div10 ;
- add dl,"0" ;
- mov str_x1+33,dl ;
- xor dx,dx
- and ax,ax
- jz short #qui
- div div10
- add dl,"0"
- mov str_x1+32,dl
- xor dx,dx ;
- and ax,ax ;
- jz short #qui ;
- div div10 ;
- add dl,"0" ;
- mov str_x1+31,dl ;
- #qui: ret
- COMMENT_SET endp
-
- ;======== WORK AREA ========
- even
- file_handle dw ?
- file_name db 80h dup (?)
- terminal_para db 12h dup (?)
- option_para dw 0 ; 0 or 1
-
- ;======== MESSAGES ========
- str_o db 0dh
- db "Hi-SPEED TEXT FILE UPLOADING COMMAND Version 1.0c ",0dh,0ah,"$"
- str_o2 db "Programed by Ken Inoue.(C)1991 ",0dh,0ah,"$"
- str_o3 db 0dh,0ah,"$"
- str_file_check db "Now get a file size!",0dh,"$"
- str_s1 db "高速転送処理中(LineEnd=CR)",0dh,0ah,"$"
- str_s2 db "高速転送処理中(LineEnd=CR+LF)",0dh,0ah,"$"
- str_f db 0dh,0ah,"転送完了しました。",0dh,0ah,"$"
- str_q db 0dh,0ah,"エラー発生の為、処理を中断しました。",0dh,0ah,"$"
- str_inf db 0dh,0ah,"----- 御使用方法 -----",0dh,0ah,0dh,0ah
- db "(1) SEND filename --- 改行コードCRのみ",0dh,0ah
- db "(2) SEND filename /L --- 改行コードCR+LF",0dh,0ah
- db 0dh,0ah,"上記の様に呼出しを行ってください",0dh,0ah,"$"
- str_x0 db "Now ",1bh,"[31;7mWAIT!",1bh,"[0m ",0dh,"$"
- str_x1 db "Now ",1BH,"[36;7mSENDING",1BH,"[0m : ("
- db 0,0,0,"0/",0,0,0,"0KB)",0dh,"$"
-
- ;======== work (^_^;) ========
- align 2
- div10 dw 10
- data_size1 dw 0
- data_size2 dw 0
- file_size dw 0
- flag db ?
- d_sp dw ?
- stack db 256 dup(?)
- data_buffer label far ;BUFFER SIZE dup (?) ;(^^;)
- end SEND_TXT